export default {
	state: {
		// 存储购物车中的所有商品
		cartItems: JSON.parse(localStorage.getItem("cartItems") || "[]")
	},

	mutations: {
		// 增加购物车商品
		ADD_CART_ITEMS(state, payload) {
		  // 如果 cartItems 为空，先初始化为数组
		  if (!Array.isArray(state.cartItems)) {
		    state.cartItems = [];
		  }
		
		  const { date, mealType, time, products } = payload;
		
		  // 查找是否已经有相同的 date、mealType 和 time
		  const existingMeal = state.cartItems.find(
		    (item) => item.date === date && item.mealType === mealType && item.time === time
		  );
		
		  if (existingMeal) {
		    // 如果找到了相同的餐段，更新产品
		    products.forEach((newItem) => {
		      // 查找是否已存在相同 id 的商品
		      const existingItem = existingMeal.products.find(
		        (item) => item.id === newItem.id
		      );
		
		      if (existingItem) {
		        // 如果数量为 0，删除该商品
		        if (newItem.count <= 0) {
		          const indexToRemove = existingMeal.products.findIndex(
		            (item) => item.id === newItem.id
		          );
		          if (indexToRemove !== -1) {
		            existingMeal.products.splice(indexToRemove, 1); // 删除商品
		          }
		        } else {
		          // 否则更新商品数量
		          existingItem.count = newItem.count;
		        }
		      } else {
		        // 如果商品不存在，添加到 products 中
		        existingMeal.products.push({
		          ...newItem,
		          count: newItem.count || 1,
		        });
		      }
		    });
		
		    // 删除所有 count 为 0 的商品
		    existingMeal.products = existingMeal.products.filter(item => item.count > 0);
		
		    // 如果该餐段的所有商品的 count 都为 0，删除整个餐段对象
		    if (existingMeal.products.length === 0) {
		      const mealIndex = state.cartItems.findIndex(
		        (item) => item.date === date && item.mealType === mealType && item.time === time
		      );
		      if (mealIndex !== -1) {
		        state.cartItems.splice(mealIndex, 1); // 删除餐段
		      }
		    }
		  } else {
		    // 如果没有找到相同的餐段，添加新的餐段对象
		    const newMeal = {
		      date,
		      mealType,
		      time,
		      products: products.map((product) => ({
		        ...product,
		        count: product.count || 1,
		      })),
		    };
		
		    // 过滤掉 count 为 0 的商品
		    newMeal.products = newMeal.products.filter(item => item.count > 0);
		
		    // 如果新餐段没有商品，则不添加
		    if (newMeal.products.length > 0) {
		      state.cartItems.push(newMeal);
		    }
		  }
		
		  // 同步保存到 localStorage
		  localStorage.setItem("cartItems", JSON.stringify(state.cartItems));
		},

		DECREASE_CART_ITEMS(state, payload) {
		  const { date, mealType, time, products } = payload;
		
		  // 查找是否已经有相同的 date、mealType 和 time
		  const existingMealIndex = state.cartItems.findIndex(
		    (item) => item.date === date && item.mealType === mealType && item.time === time
		  );
		
		  if (existingMealIndex !== -1) {
		    // 如果找到了相同的餐段
		    const existingMeal = state.cartItems[existingMealIndex];
		
		    // 如果传入的 products 为空，说明已经没有商品了，直接删除该餐段
		    if (products.length === 0) {
		      state.cartItems.splice(existingMealIndex, 1); // 删除整个餐段
		    } else {
		      // 否则，更新该餐段的 products
		      existingMeal.products = products;
		
		      // 删除所有 count 为 0 的商品
		      existingMeal.products = existingMeal.products.filter((item) => item.count > 0);
		
		      // 如果该餐段的所有商品的 count 都为 0，则删除整个餐段对象
		      if (existingMeal.products.length === 0) {
		        state.cartItems.splice(existingMealIndex, 1); // 删除餐段
		      }
		    }
		  }
		
		  // 同步保存到 localStorage
		  localStorage.setItem("cartItems", JSON.stringify(state.cartItems));
		},

		DECREASE_ORDER_ITEMS(state, payload) {
			const {
				date,
				mealType,
				time,
				products
			} = payload;
			console.log('长度22', products, date, mealType, time);

			const existingMeal = state.cartItems.find(
				(item) => item.date === date && item.mealType === mealType && item.time === time
			);
			console.log('existingMeal22', existingMeal);

			if (existingMeal) {
				products.forEach((newItem) => {
					const existingItem = existingMeal.products.find(
						(item) => item.id === newItem.id
					);

					if (existingItem) {
						// 如果数量减少到小于或等于 0，删除该商品
						if (newItem.count <= 0) {
							const indexToRemove = existingMeal.products.findIndex(
								(item) => item.id === newItem.id
							);
							if (indexToRemove !== -1) {
								existingMeal.products.splice(indexToRemove, 1); // 删除商品
							}
						} else {
							// 否则更新商品数量
							existingItem.count = newItem.count;
						}
					} else {
						// 如果商品不存在，添加到 products 中
						existingMeal.products.push({
							...newItem,
							count: newItem.count || 1,
						});
					}
				});

				// 删除所有 count 为 0 的商品
				existingMeal.products = existingMeal.products.filter(item => item.count > 0);

				// 如果所有商品都被删除，删除整个餐段对象
				if (existingMeal.products.length === 0) {
					const mealIndex = state.cartItems.findIndex(
						(item) => item.date === date && item.mealType === mealType && item.time === time
					);
					if (mealIndex !== -1) {
						state.cartItems.splice(mealIndex, 1); // 删除餐段
					}
				}
			}

			// 更新 localStorage
			localStorage.setItem("cartItems", JSON.stringify(state.cartItems));
		},

		// 清除过期的购物车内容
		CLEAR_EXPIRED_CART_ITEMS(state) {
			const currentDate = new Date();
			const filteredCartItems = state.cartItems.filter((item) => {
				// 如果 mealType 是 "商店"，直接保留
				if (item.mealType === "商店") {
					return true;
				}

				const itemDate = new Date(item.date);
				// 如果日期未过期
				if (itemDate > currentDate) {
					return true;
				}
				// 如果是当天，检查时间是否过期
				if (itemDate.toDateString() === currentDate.toDateString()) {
					return item.time > currentDate.toTimeString().split(" ")[0]
				}
				// 其他情况删除
				return false;
			});

			state.cartItems = filteredCartItems;
			localStorage.setItem("cartItems", JSON.stringify(state.cartItems))
		}
	},

	actions: {
		addCartItems({
			commit
		}, items) {
			commit("ADD_CART_ITEMS", items)
		},
		decreaseCartItems({
			commit
		}, items) {
			commit("DECREASE_CART_ITEMS", items)
		},
		decreaseOrderItems({
			commit
		}, items) {
			commit("DECREASE_ORDER_ITEMS", items)
		},
		clearExpiredCartItems({
			commit
		}) {
			commit("CLEAR_EXPIRED_CART_ITEMS")
		},
	},

	getters: {
		// 获取购物车中的所有商品
		cartItems: (state) => state.cartItems,

		// 计算所有商品的总数量
		totalCount: (state) => {
			return state.cartItems.reduce((sum, item) => {
				// 遍历每个 cartItem 的 products，并累加其中的 count
				const productsCount = item.products.reduce((productSum, product) => productSum + product
					.count, 0);
				return sum + productsCount;
			}, 0);
		}
	}
}